iT邦幫忙

2021 iThome 鐵人賽

DAY 25
11
Software Development

奇怪的知識增加了!原來程式還可以這樣用?!系列 第 25

[Day25] 忘記壓縮檔密碼怎麼辦? 用Python多重處理快速破解壓縮檔密碼!

  • 分享至 

  • xImage
  •  

因為公司政策規定,傳機密壓縮檔的時候都要加上密碼,
但是收到的檔案這麼多,每次都要翻信找密碼真的太麻煩,而且不小心刪掉信就直接完蛋...

若公司壓縮檔密碼只有數字的話,就可以用本程式破解喔~
(密碼有英文加數字的話要用之前提過的密碼本破解)

但是如果公司密碼是多位數的數字,等到破解完檔案,可能已經下班了><
所以這時候用 multiprocessing 解碼,速度就會加快很多!

使用環境

程式碼

import pyzipper
from multiprocessing import Process
import time

zip_file = pyzipper.AESZipFile("加密壓縮檔.zip",'r')
zip_flag = False
start_time = time.time()

# 開始破解壓縮檔密碼
def decode(start_pwd, end_pwd):
    global zip_file
    global zip_flag
    for password in range(start_pwd, end_pwd):
        try:
            if zip_flag == False:
                zip_file.extractall(pwd=str(password).encode())
                print('成功破解,密碼:{}'.format(password))
                end_time = time.time()
                print("總共花費{}秒".format(end_time-start_time))
                zip_file.close()
                zip_flag = True
                break
            else:
                break
        except:
            pass
        
if __name__ == '__main__': 
    print("正在破解...")
    process_num = 1 # 設定要使用的process數量
    workload = 12000 # 設定每個process負責破解的密碼數量
    processes = []
    # 建立processes
    for i in range(process_num):
        curr_process = Process( target = decode, args=(i*workload, (i+1)*workload))
        processes.append(curr_process)
    # 開始processes
    for p in processes:    
        p.start()
    # 等待各process完成
    for p in processes:
        p.join()

成果發表會
為了更方便看出multiprocessing的速度差異,我這邊將密碼範圍設為0-12000,
分別設定用1、2、3、4、5個執行緒同時執行解密程式。
https://ithelp.ithome.com.tw/upload/images/20210925/201332864BTZdeOJx8.png

溫馨小提醒

從上圖結果可以看到,執行緒數量越多猜出密碼的速度越快,
但是如果process設定超過當前機器的CPU核心數量的話,CPU間程序處理的切換成本反而會降低處理效率!
所以不一定設定越多process越好喔~

如果想知道當前機器的CPU核心數量可以用下列語法來查詢:

import multiprocessing
cpus = multiprocessing.cpu_count()
print(cpus)

上一篇
[Day24] iT邦幫忙502 Bad Gateway怎麼辦? 教你自動偵測網頁修復了沒!
下一篇
[Day26] 電腦有秘密檔案不想被發現嗎? 教你用圖片偽裝秘密檔案!
系列文
奇怪的知識增加了!原來程式還可以這樣用?!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
lagagain
iT邦新手 2 級 ‧ 2021-09-28 07:04:22

這篇竟然還沒有人留言,來搶頭香~

lulu_meat iT邦研究生 5 級 ‧ 2021-09-28 08:48:02 檢舉

可能寫得太無聊了>< 今天的主題會很有趣的~

我要留言

立即登入留言